home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / PD_THEMA / CPX / GEMSOUND / SOURCE / SOUND_AS.S < prev    next >
Text File  |  1998-03-14  |  4KB  |  130 lines

  1. ; sound_as.s
  2. ; Assembler-Routinen
  3. ;
  4. ; aus: GEM Sound
  5. ;      TOS Magazin
  6. ;
  7. ; (c)1992 by Richard Kurz
  8. ; Vogelherdbogen 62
  9. ; 7992 Tettnang
  10. ; Fido 2:241/7232
  11. ;
  12. ; Erstellt mit Pure Assembler
  13. ;
  14.  
  15. ; Wir geben bekannt
  16. export  set_gem,set_click,start_sound
  17. import  do_it
  18.  
  19. ;********************************************************************
  20. ; Die Vektoren werden verbogen
  21.  
  22. BELL        equ $5ac    
  23. CLICK       equ $5b0    
  24.  
  25. set_gem:                
  26.     pea     new_gem             ; Der AES/VDI-Trap
  27.     move.w  #34,-(sp)
  28.     move.w  #5,-(sp)
  29.     trap    #13
  30.     addq.l  #8,sp
  31.     move.l  d0,old_gem
  32.     rts
  33.  
  34. set_click:              
  35.     lea     BELL,a0             ; Der Vektor für den System-Beep
  36.     move.l  (a0),old_bell
  37.     move.l  #new_bell,(a0)  
  38.  
  39.     lea     CLICK,a0            ; Der Vektor für den Tastaturklick
  40.     move.l  (a0),old_click
  41.     move.l  #new_click,(a0) 
  42.     rts
  43.     
  44. ;********************************************************************
  45. ; Die neuen Routinen für die Systemtöne
  46.  
  47.     dc.b    'XBRA'
  48.     dc.b    '----'
  49. old_bell:
  50.     dc.l    1
  51.  
  52. new_bell:
  53.     move.w  #-1,d0                  ; Sound-Nr. für System-Beep
  54.     bsr     do_it                   ; Beeeeepen
  55.     tst.w   d0                      ; Soll der Originalton erschallen
  56.     beq.s no_old_bell
  57.     move.l  old_bell(PC),-(SP)      ; Zur Originalroutine
  58. no_old_bell:
  59.     rts                             ; Das war's
  60.  
  61.     dc.b    'XBRA'
  62.     dc.b    '----'
  63. old_click:
  64.     dc.l    1
  65.  
  66. new_click:
  67.     move.w  #-2,d0                  ; Sound-Nr. für Tastaturklick
  68.     bsr     do_it                   ; Klick ausgeben
  69.     tst.w   d0                      ; Soll der Originalton erschallen
  70.     beq.s   no_old_click
  71.     move.l  old_click(PC),-(SP)     ; Zur Originalroutine
  72. no_old_click:
  73.     rts                             ; Das war's
  74.  
  75. ;********************************************************************
  76. ; Der neue AES/VDI Trap
  77.     
  78.     dc.b    'XBRA'
  79.     dc.b    '----'
  80. old_gem:
  81.     dc.l    1
  82.  
  83. new_gem:
  84.     movem.l d0-A6,-(SP)             ; Vorsicht ist die Mutter der
  85.                                     ; Porzellankiste
  86.     cmp.l   #200,d0                 ; Ist's ein AES-Aufruf
  87.     bne.s   to_gem
  88.     movea.l d1,a0                   ; Ja
  89.     movea.l (a0),a0                 ; Die AES-Nr. rauspfriemeln
  90.     move.w  (a0),d0
  91.     bsr     do_it                   ; Spiel das Lied    
  92.  
  93. to_gem:
  94.     movem.l (SP)+,d0-A6             ; Das war's
  95.     move.l  old_gem(PC),-(SP)       
  96.     rts
  97.  
  98. ;********************************************************************
  99. ; Ausgabe eines Sounds
  100. ; Aufruf aus C:
  101. ; start_sound(char *Start,char *Ende, int Reset)
  102. ; Diese Routine darf nur im Supervisor-Mode ausgeführt werden
  103.  
  104. SDMACTL     equ $ff8900             ; DMA-Sound Controlregister
  105. SSTART      equ $ff8903             ; Frame-Startadresse
  106. SEND        equ $ff890f             ; Frame-Endadresse
  107. SDMAMOD     equ $ff8920             ; DMA-Sound Moderegister
  108.  
  109. start_sound:
  110.     tst.w d0                        ; Soll der alte Sound
  111.     beq.s no_stop                   ; abgewürgt werden
  112.     move.w  #$00,SDMACTL            ; Abwürgen
  113.     
  114. no_stop:    
  115.     move.l  a0,-(sp)                ; Start des Frames in die
  116.     move.b  1(sp),SSTART            ; Frame-Start-Register
  117.     move.b  2(sp),SSTART+2          ; schreiben
  118.     move.b  3(sp),SSTART+4
  119.     addq.l  #4,sp
  120.  
  121.     move.l  a1,-(sp)                ; Ende des Frames in die
  122.     move.b  1(sp),SEND              ; Frame-End-Register
  123.     move.b  2(sp),SEND+2            ; schreiben
  124.     move.b  3(sp),SEND+4
  125.     addq.l  #4,sp
  126.     
  127.     move.w  #$81,SDMAMOD            ; Mono / 12.5 kHz einstellen
  128.     move.w  #$01,SDMACTL            ; Sound starten
  129.     rts                             ; et fini
  130.